//全局工具类
const utils = {
    getDate(type) {
        const date = new Date()
        let year = date.getFullYear()
        let month = date.getMonth() + 1
        let day = date.getDate()

        if (type === "start") {
            year = year - 60
        } else if (type === "end") {
            year = year + 2
        }
        month = month > 9 ? month : "0" + month
        day = day > 9 ? day : "0" + day
        return `${year}-${month}-${day}`
    },
    getDatetime(type) {
        const date = new Date()
        let year = date.getFullYear()
        let month = date.getMonth() + 1
        let day = date.getDate()
        let h = date.getHours() // 小时
        let m = date.getMinutes() // 分
        let s = date.getSeconds() // 秒
        if (type === "start") {
            year = year - 60
        } else if (type === "end") {
            year = year + 2
        }
        month = month > 9 ? month : "0" + month
        day = day > 9 ? day : "0" + day
        h = h > 9 ? h : "0" + h
        m = m > 9 ? m : "0" + m
        s = s > 9 ? s : "0" + s
        return `${year}-${month}-${day} ${h}:${m}:${s}`
    },
    //去重
    setReduce(arr, name) {
        var hash = {}
        return arr.reduce(function (item, next) {
            hash[next[name]] ? "" : (hash[next[name]] = true && item.push(next))
            return item
        }, [])
    },
    //数组排序
    sortBykey(ary, key) {
        return ary.sort(function (a, b) {
            let x = a[key]
            let y = b[key]
            return x < y ? -1 : x > y ? 1 : 0
        })
    },
    dateTimeStr(str) {
        var date = new Date(),
            year = date.getFullYear(), //年
            month = date.getMonth() + 1, //月
            day = date.getDate(), //日
            hour = date.getHours() < 10 ? "0" + date.getHours() : date.getHours(), //时
            minute = date.getMinutes() < 10 ? date.getMinutes() : date.getMinutes(), //分
            second = date.getSeconds() < 10 ? date.getSeconds() : date.getSeconds() //秒
        month >= 1 && month <= 9 ? (month = "0" + month) : ""
        day >= 0 && day <= 9 ? (day = "0" + day) : ""
        hour >= 0 && hour <= 9 ? hour : ""
        minute >= 0 && minute <= 9 ? (minute = "0" + minute) : ""
        second >= 0 && second <= 9 ? (second = "0" + second) : ""
        if (str.indexOf("y") != -1) {
            str = str.replace("y", year)
        }
        if (str.indexOf("m") != -1) {
            str = str.replace("m", month)
        }
        if (str.indexOf("d") != -1) {
            str = str.replace("d", day)
        }
        if (str.indexOf("h") != -1) {
            str = str.replace("h", hour)
        }
        if (str.indexOf("i") != -1) {
            str = str.replace("i", minute)
        }
        if (str.indexOf("s") != -1) {
            str = str.replace("s", second)
        }
        return str
    },

    //获取日期的今天，明天，后天 -1是昨天，0是今天，1是后一天
    getDateStr(today, addDayCount) {
        let date
        if (today) {
            date = new Date(today)
        } else {
            date = new Date()
        }
        date.setDate(date.getDate() + addDayCount) //获取AddDayCount天后的日期
        let y = date.getFullYear()
        let m = date.getMonth() + 1 //获取当前月份的日期
        let d = date.getDate()
        if (m < 10) {
            m = "0" + m
        }
        if (d < 10) {
            d = "0" + d
        }
        return m + "月" + d + "日"
    },
    checkModbile(mobile) {
        const reg = /^1[3,4,5,6,7,8,9][0-9]{9}$/
        return reg.test(mobile)
    },
    //自动识别地址
    AutoDistinguishAddress(name) {
        var returninfo = {
            name: "",
            address: "",
            phone: ""
        }
        name = name.replace(/(^[\"|\'])|([\"|\']$)/g, "");//去掉前后引号//"15312345678陈晨晨福建省泉州市坪山路上海大厦"
        if (!name) {
            return returninfo;
        }
        //省
        var province = ["广东", "北京", "浙江", "福建", "湖北", "上海", "江苏", "天津", "河北", "山西", "内蒙古", "辽宁", "吉林", "黑龙江", "安徽", "江西", "山东", "河南", "湖南", "广西", "海南", "重庆", "四川", "贵州", "云南", "西藏", "陕西", "甘肃", "青海", "宁夏", "新疆", "台湾", "香港", "澳门"];
        //姓氏
        var familyName = ['赵', '钱', '孙', '李', '周', '吴', '郑', '王', '冯', '陈', '楮', '卫', '蒋', '沈', '韩', '杨', '朱', '秦', '尤', '许', '何', '吕', '施', '张', '孔', '曹', '严', '华', '金', '魏', '陶', '姜', '戚', '谢', '邹', '喻', '柏', '水', '窦', '章', '云', '苏', '潘', '葛', '奚', '范', '彭', '郎', '鲁', '韦', '昌', '马', '苗', '凤', '花', '方', '俞', '任', '袁', '柳', '酆', '鲍', '史', '唐', '费', '廉', '岑', '薛', '雷', '贺', '倪', '汤', '滕', '殷', '罗', '毕', '郝', '邬', '安', '常', '乐', '于', '时', '傅', '皮', '卞', '齐', '康', '伍', '余', '元', '卜', '顾', '孟', '平', '黄', '和', '穆', '萧', '尹', '姚', '邵', '湛', '汪', '祁', '毛', '禹', '狄', '米', '贝', '明', '臧', '计', '伏', '成', '戴', '谈', '宋', '茅', '庞', '熊', '纪', '舒', '屈', '项', '祝', '董', '梁', '杜', '阮', '蓝', '闽', '席', '季', '麻', '强', '贾', '路', '娄', '危', '江', '童', '颜', '郭', '梅', '盛', '林', '刁', '锺', '徐', '丘', '骆', '高', '夏', '蔡', '田', '樊', '胡', '凌', '霍', '虞', '万', '支', '柯', '昝', '管', '卢', '莫', '经', '房', '裘', '缪', '干', '解', '应', '宗', '丁', '宣', '贲', '邓', '郁', '单', '杭', '洪', '包', '诸', '左', '石', '崔', '吉', '钮', '龚', '程', '嵇', '邢', '滑', '裴', '陆', '荣', '翁', '荀', '羊', '於', '惠', '甄', '麹', '家', '封', '芮', '羿', '储', '靳', '汲', '邴', '糜', '松', '井', '段', '富', '巫', '乌', '焦', '巴', '弓', '牧', '隗', '山', '谷', '车', '侯', '宓', '蓬', '全', '郗', '班', '仰', '秋', '仲', '伊', '宫', '宁', '仇', '栾', '暴', '甘', '斜', '厉', '戎', '祖', '武', '符', '刘', '景', '詹', '束', '龙', '叶', '幸', '司', '韶', '郜', '黎', '蓟', '薄', '印', '宿', '白', '怀', '蒲', '邰', '从', '鄂', '索', '咸', '籍', '赖', '卓', '蔺', '屠', '蒙', '池', '乔', '阴', '郁', '胥', '能', '苍', '双', '闻', '莘', '党', '翟', '谭', '贡', '劳', '逄', '姬', '申', '扶', '堵', '冉', '宰', '郦', '雍', '郤', '璩', '桑', '桂', '濮', '牛', '寿', '通', '边', '扈', '燕', '冀', '郏', '浦', '尚', '农', '温', '别', '庄', '晏', '柴', '瞿', '阎', '充', '慕', '连', '茹', '习', '宦', '艾', '鱼', '容', '向', '古', '易', '慎', '戈', '廖', '庾', '终', '暨', '居', '衡', '步', '都', '耿', '满', '弘', '匡', '国', '文', '寇', '广', '禄', '阙', '东', '欧', '殳', '沃', '利', '蔚', '越', '夔', '隆', '师', '巩', '厍', '聂', '晁', '勾', '敖', '融', '冷', '訾', '辛', '阚', '那', '简', '饶', '空', '曾', '毋', '沙', '乜', '养', '鞠', '须', '丰', '巢', '关', '蒯', '相', '查', '后', '荆', '红', '游', '竺', '权', '逑', '盖', '益', '桓', '公', '万俟', '司马', '上官', '欧阳', '夏侯', '诸葛', '闻人', '东方', '赫连', '皇甫', '尉迟', '公羊', '澹台', '公冶', '宗政', '濮阳', '淳于', '单于', '太叔', '申屠', '公孙', '仲孙', '轩辕', '令狐', '锺离', '宇文', '长孙', '慕容', '鲜于', '闾丘', '司徒', '司空', '丌官', '司寇', '仉', '督', '子车', '颛孙', '端木', '巫马', '公西', '漆雕', '乐正', '壤驷', '公良', '拓拔', '夹谷', '宰父', '谷梁', '晋', '楚', '阎', '法', '汝', '鄢', '涂', '钦', '段干', '百里', '东郭', '南门', '呼延', '归', '海', '羊舌', '微生', '岳', '帅', '缑', '亢', '况', '后', '有', '琴', '梁丘', '左丘', '东门', '西门', '商', '牟', '佘', '佴', '伯', '赏', '南宫', '墨', '哈', '谯', '笪', '年', '爱', '阳', '佟', '第五', '言', '福'];
    
        var other = [];
        var nameAndaddress = '';
        var Name = '';
        var address = '';
        var phone = name.match(/((((13[0-9])|(15[^4])|(18[0,1,2,3,5-9])|(17[0-8])|(147))\d{8})|((\d3,4|\d{3,4}-|\s)?\d{7,14}))?/g);
        if (phone != null || phone != '') {
            phone = phone.toString().replace(new RegExp(",", "g"), '').replace(new RegExp(" ", "g"), '');
            other = name.split(phone);
    
            if (other[0] == '') { //地址在后面
                //去掉手机号剩下的
                nameAndaddress = other[1].replace(new RegExp(" ", "g"), '');
    
                for (var i = 0; i < province.length; i++) {
                    if (nameAndaddress.indexOf(province[i]) == 0) { //第一位是省份
                        address = nameAndaddress;
                        Name = "";
                        break;
                    } else if (nameAndaddress.indexOf(province[i]) == -1) { //没有省份信息
                        console.log('没有省份信息')
                    } else { //不在第一位
                        //截取字符串
                        //前面为姓名  后面为地址
                        var index = nameAndaddress.indexOf(province[i]);
                        Name = nameAndaddress.substring(0, index);
                        address = nameAndaddress.substring(index, nameAndaddress.length);
                        break;
                    }
                }
    
            } else if (other[1] == '') { //地址在前面
                //去掉手机号剩下的
                nameAndaddress = other[0].replace(new RegExp(" ", "g"), '');
    
                for (var i = 0; i < province.length; i++) {
                    if (nameAndaddress.indexOf(province[i]) == 0) { //第一位是省份
                        for (var i = 0; i < familyName.length; i++) {
                            if (nameAndaddress.lastIndexOf(familyName[i]) != -1) { //有姓氏
                                console.log('有姓氏')
                                var index = nameAndaddress.lastIndexOf(familyName[i]);
                                //截取字符串
                                //前面为地址 后面为姓氏
                                address = nameAndaddress.substring(0, index);
                                Name = nameAndaddress.substring(index, nameAndaddress.length);
                                console.log(index);
                                break;
                            } else { //没有姓氏
                                console.log('没有姓氏')
                            }
                        }
                        break;
                    } else if (nameAndaddress.indexOf(province[i]) == -1) { //没有省份信息
                        console.log('没有省份信息')
                    } else { //不在第一位
                        //截取字符串
                        //前面为姓名  后面为地址
                        var index = nameAndaddress.indexOf(province[i]);
                        Name = nameAndaddress.substring(0, index);
                        address = nameAndaddress.substring(index, nameAndaddress.length);
                        break;
                    }
                }
                if (!Name && !address)
                    Name = other[0];
            } else {
                console.log('手机号在中间');
                if (other.length > 1) {
                    if (other[0].length > other[1].length) {
                        address = other[0];
                        Name = other[1];
                        console.log('姓名在后面');
                    } else if (other[0].length < other[1].length) {
                        console.log('姓名在前面');
                        address = other[1];
                        Name = other[0];
                    }
                } else if (other.length == 1) {
                    Name = other[0];
                }
            }
        } else { }
    
        returninfo.name = Name;
        returninfo.address = address;
        returninfo.phone = phone;
        return returninfo;
    },
    // 拿到需要返回的页面路径和参数并保存 （跳转之前调用此方法）
    setCallbackUrl: function(mode) {
        console.log("mode", mode)
        return new Promise((resolve,reject) => {
            let pages = getCurrentPages(); //获取历史页面记录
            let currentPage = pages[pages.length - 1]; //获取当前页面
            let urlPage = ''; 
            let url = currentPage.route; //拿到当前页面url
            let argumentsStr = '';
            let options = currentPage.options; //拿到参数对象
            for (let key in options) {
                    let value = options[key];
                    argumentsStr += key + '=' + value + '&';
            }
            if(argumentsStr) {
                 argumentsStr = argumentsStr.substring(0, argumentsStr.length - 1);
                 urlPage = url + '?' + argumentsStr;
            } else {
                urlPage = url;
            }
            let callbackObj = {
                callbackUrl: `/${urlPage}`,
                mode: mode || 'redirectTo'
            }
             wx.setStorageSync('callbackObj', JSON.stringify(callbackObj));
             resolve();
        })
    },
     
    // 提取本地存储的要返回的页面地址和参数，并返回之前的页面（登录完成后调用此方法）
    // getCallBackUrl: function() {
    //     return new Promise((resolve,reject) => {
    //         const callbackObj = wx.getStorageSync('callbackObj');
    //         if(callbackObj) {
    //             let resultObj = JSON.parse(callbackObj);
    //             let callbackUrl = resultObj.callbackUrl;
    //             let mode = resultObj.mode;
    //             mode == 'redirectTo' && wx.redirectTo({url: callbackUrl});
    //             mode == 'switchTab' && wx.switchTab({url: callbackUrl});
    //             mode == 'reLaunch' && wx.reLaunch({url: callbackUrl});
    //             mode == 'navigateTo' && wx.navigateTo({url: callbackUrl});
    //         } else {
    //             reject();
    //         }
    //     })
    // },
    getCallBackUrl: function() {  
        return new Promise((resolve, reject) => {  
            const callbackObj = wx.getStorageSync('callbackObj');  
            if (callbackObj) {  
                try {  
                    let resultObj = JSON.parse(callbackObj);  
                    let callbackUrl = resultObj.callbackUrl;  
                    let mode = resultObj.mode;  
                      
                    // 返回一个对象，包含 URL 和跳转模式  
                    resolve({ url: callbackUrl, mode });  
                } catch (e) {  
                    // 如果解析 JSON 失败，则拒绝 Promise  
                    reject(e);  
                }  
            } else {  
                // 如果没有 callbackObj，则拒绝 Promise  
                reject();  
            }  
        });  
    },
}

module.exports = {
    setReduce: utils.setReduce,
    sortBykey: utils.sortBykey,
    getDate: utils.getDate,
    getDatetime: utils.getDatetime,
    getDateStr: utils.getDateStr,
    dateTimeStr: utils.dateTimeStr,
    checkModbile: utils.checkModbile,
    AutoDistinguishAddress: utils.AutoDistinguishAddress,
    setCallbackUrl: utils.setCallbackUrl,
    getCallBackUrl: utils.getCallBackUrl,
}
